import os
import pandas as pd
import plotly.express as px

# === 设置路径 ===
file1_path = 'E:/01-work/01-国网/01-数据分析/LN_16k_mask_embed_sync/statistics.xlsx'
file2_path = 'E:/01-work/01-国网/01-数据分析/LN_14k_mask_embed_sync/statistics.xlsx'

# === 获取“上一级目录名”作为来源标签 ===
dir1_label = os.path.basename(os.path.dirname(file1_path))
dir2_label = os.path.basename(os.path.dirname(file2_path))

# === 读取Excel文件 ===
df1 = pd.read_excel(file1_path)
df2 = pd.read_excel(file2_path)

# === 按“节点P偏差最大值”排序并筛选 > 阈值 ===
threshold = 10
df1_sorted = df1.sort_values(by='节点P偏差最大值', ascending=False)
filtered_df1 = df1_sorted[df1_sorted['节点P偏差最大值'] > threshold]

# === 获取符合条件的文件名称列表 ===
file_names = filtered_df1['文件名称']

# === 在第二个文件中找出对应记录 ===
matched_df2 = df2[df2['文件名称'].isin(file_names)]

# === 合并两个来源的节点P偏差最大值 ===
merged = pd.merge(
    filtered_df1[['文件名称', '节点P偏差最大值']],
    matched_df2[['文件名称', '节点P偏差最大值']],
    on='文件名称',
    suffixes=(f'_{dir1_label}', f'_{dir2_label}')
)

# === 可视化 ===
fig = px.bar(
    merged.melt(
        id_vars='文件名称', 
        value_vars=[
            f'节点P偏差最大值_{dir1_label}', 
            f'节点P偏差最大值_{dir2_label}'
        ],
        var_name='来源', 
        value_name='节点P偏差最大值'
    ),
    x='文件名称',
    y='节点P偏差最大值',
    color='来源',
    barmode='group',
    title=f'节点P偏差最大值对比（筛选>{threshold}MW）'
)

# === 添加10MW红色虚线 ===
fig.add_shape(
    type="line",
    x0=-0.5,
    x1=len(merged) - 0.5,
    y0=threshold,
    y1=threshold,
    line=dict(color="red", width=2, dash="dash")
)

# === 添加“阈值10MW”标注 ===
fig.add_annotation(
    x=0,
    y=threshold,
    text=f"阈值 {threshold}MW",
    showarrow=False,
    yshift=10,
    font=dict(color="red", size=12)
)

# === 美化与保存 ===
fig.update_layout(xaxis_tickangle=45)
fig.write_html('P偏差最大值对比图.html')
fig.show()
